ARAL使用说明

修订日期 修订版本 修订内容 修订人
2021.06.20 v0.1 初始化文档 刘刚
2023.07.21 v0.2 增加算法功能列表 刘刚

[TOC]

ARAL是一个灵活, 高效且可扩展性强的机器人算法库. 以C++为基础, 使用了大量的C++11/17特性, 不依赖于第三方算法库。主要包括建模、规划和控制三部分, 具体可分为基础数学、刚体建模、运动学、动力学、标定辨识、运动规划、轨迹规划、运动控制、力控制等模块。

aral以基础算法平台为发展目标,旨在配合遨博控制器软件,快速、有效的为遨博产品的更新迭代提供灵活的算法支持。

ARAL: 读音: [ˈɑrɑl], 是 Aubo Robot Algorithm Library 的缩写

  1. 层次化设计
  2. 清晰的四层结构:基础库、机器人、规划器、任务
  3. 每层都有独立的接口和职责
  4. 使用句柄管理不同层次的实例
  5. 资源管理
  6. 使用工厂模式创建和管理实例
  7. 使用智能指针管理对象生命周期
  8. 使用句柄机制管理实例引用
  9. 错误处理
  10. 使用 Result 类型封装返回值和错误信息
  11. 提供统一的错误处理机制
  12. 支持链式调用
  13. 接口分组
  14. 按功能模块清晰分组(mdl/rs/fc/tp)
  15. 保持原有的命名规范
  16. 相关功能内聚到对应接口类中
  17. 配置管理
  18. 每个层次都有独立的配置对象
  19. 使用强类型而不是 any
  20. 支持配置的验证和继承

句柄管理: 使用句柄(Handle)标识不同的机器人实例 提供句柄到实例的映射 支持实例的生命周期管理 协同控制: 支持多机器人协同规划 提供不同的协同模式 支持同步点和并行动作 资源管理: 清晰的资源创建和销毁接口 自动的资源回收机制 防止资源泄露 安全性: 提供碰撞检测 支持安全距离设置 错误处理机制 灵活性: 支持不同的协同模式 可扩展的配置选项 自定义协同策略 这种设计允许用户: 创建和管理多个机器人实例 配置不同的协同控制模式 实现复杂的多机器人任务 保证系统的安全性和可靠性

文档命名规则

aral算法库开发文档命名前缀规则如下:

  • 1.*. 为 aral 相关文档

  • 2.*. 为建模相关文档

  • 3.*. 为规划相关文档

  • 4.*. 为控制相关文档

  • 5.*. 为其他应用文档

目录及层次定义

. 算法开发环境根目录
├── aubo_description(机械臂描述文件)
│ ├── meshes(机械臂3D几何体文件)
│ │ └── aubo_i5 (具体的机械臂)
│ │ ├── collision(碰撞几何体)
│ │ └── visual(显示几何体)
│ └── urdf(机械臂URDF文件和SRDF文件)
├── include (用户接口头文件)
│ └── aral (接口申明、基础数据类型定义、返回值说明)
├── lib (用户开发库 64位)
├── lib32 (用户开发库 32位)
└── resources (用户开发可能用到的资源文件)

开发库的下载地址为: http://mirrors.aubo-robotics.cn:8001/deploy/

更多文档可以参考算法部文档集

版本定义

示例: 0.0.8+2107061032.001cbf4

由版本号,编译时间, git HEAD组成

版本类型

有两种算法库可以给用户使用,一种名为 aral_basic, 该库比较轻量,用户可以直接使用由 ARAL_API_BASIC标注的接口.

另外一种算法库名为 aral, 该库涵盖所有功能

目前两种算法库均无外部依赖.

接口函数返回状态定义

对于返回值是int类型的接口函数, 一般这样规定

  • 返回值 = 0(E_NO_ERROR): 函数运行成功, 正常返回

  • 返回值 < 0: 函数计算或者执行失败, 在算法库中一般会打印具体的错误信息. 如果需要向上抛错误信息, 可以调用以下接口:

    const std::string GetErrDescription(const int errCode);
    
  • 返回值 > 0: 程序处于某种特殊状态, 如运行到轨迹终点; 算法退化. 一般如果处于这种情况, 程序能继续执行. 具体的返回值及错误描述在return_value_definition.hpp中定义.

32位库可能会遇到的问题

  • 为保证算法库的编译和运行环境一致, 在链接aral算法库时需要同时链接标准c++库(如libstdc++.so.6.0.28)

  • 目前在32位库中, 可能引起Eigen对齐问题的原因没有找全, 为了保证库的稳定性, 现在的解决办法是直接对Matrix,Array,Quaternion等对象使用DontAlign属性来忽略对齐问题, 这样可以完全禁用向量化, 但会牺牲一部分效率.

算法库实例生成

/**
 * @brief 创建机器人算法库实例
 * @param model:机器人对应的URDF描述文件
 * @param config:通过配置文件创建不同的特性(reserved)
 * @return 算法库实例指针,如果失败,返回 nullptr
 * ARAL算法库文件可以通过dlopen在运行时打开, 通过调用CreateRLIntfacePtr函数得到基类接口指针
 */
ARAL::RLIntfacePtr CreateARALIntfacePtr(const std::string& model, const std::string& config = "");

/**
 * @brief 创建机器人算法库实例(后续需要调用rlInitial来初始化该实例)
 * @return 算法库实例指针. 如果失败, 返回 nullptr
 */
ARAL::interface::ARALIntfacePtr CreateARALIntfacePtr();

可以同时生成多个实例, 支持以插件的形式动态加载算法库.

软件引用的算法版本

aral 0.26.2+891cbbe

results matching ""

    No results matching ""